﻿using System;

namespace Log
{
    /// <summary>
    /// Classe de estruturação do registro de log.
    /// </summary>
    public class EventosLogEventArgs : EventArgs
    {          
        /// <summary>
        /// Evento de registro do log em arquivo XML
        /// </summary>
        /// <param name="tipoLog">Tipo de log de acordo com os padrões predefinidos.</param>
        /// <param name="menssagem">Texto descritivo do log.</param>
        /// <param name="exception">Exceção ocorrida na execução do programa.</param>
        /// <param name="dataHora">Instante da ocorrência que gerou o log.</param>
        public EventosLogEventArgs(GrauCritico tipoLog, string menssagem, Exception exception, DateTime dataHora)
        {
            TipoLog = tipoLog;
            Descricao = menssagem;
            Exception = exception;
            DataHora = dataHora;
        }
      
        public GrauCritico TipoLog { get; private set; }
        public string Descricao { get; private set; }
        public Exception Exception { get; private set; }
        public DateTime DataHora { get; private set; }

        /// <summary>
        /// Retorna a descrição do enumerador GrauCritico e não o seu valor.
        /// </summary>
        public String TipoLogString
        {
            get { return TipoLog.ToString("G"); }
        }

        /// <summary>
        /// Sobrescrição do método ToString para retornar as informações de um registro log.
        /// </summary>
        /// <returns></returns>
        public override String ToString()
        {
            var descricao = new System.Text.StringBuilder();
            descricao.AppendFormat("Tipo de Log: {0}{1}", TipoLogString, Environment.NewLine);
            descricao.AppendFormat("Descrição: {0}{1}", Descricao, Environment.NewLine);
            descricao.AppendFormat("Ocorrido em: {0}{1}", DataHora, Environment.NewLine);
            descricao.AppendLine(Exception.ToString());
            return descricao.ToString();
        }
    }
}
